Sự chuyển đổi từ mảng kiểu C sang std::array đại diện cho một sự thay đổi căn bản hướng đến tính an toàn về kiểu dữ liệu và lập trình tổng quát trong C++ hiện đại.
1. Vấn đề Rơi Rụng Con trỏ
Mảng cũ (int arr[N]) bị ảnh hưởng bởi "rơi rụng con trỏ". Khi được truyền vào các hàm, chúng mất thông tin kích thước và chuyển thành con trỏ thô (int*). Điều này dẫn đến các phép toán con trỏ không an toàn và tràn bộ đệm.
2. Hiện đại hóa với C++11
std::array cung cấp một lớp bọc mỏng, lớp bọc không overhead xung quanh các mảng thô. Nó tích hợp với STL (Thư viện mẫu chuẩn) trong khi tuân thủ Quy tắc Năm.
3. Chuyển tiếp Hoàn hảo với std::forward
C++11 giới thiệu std::forward để đảm bảo std::array các đối tượng di chuyển qua các lớp bao mà không cần sao chép thừa. Bằng cách tận dụng Quy tắc Gộp Tham chiếu, chúng ta duy trì loại giá trị của đối tượng (lvalue so với rvalue).
$$T\&\& + \& \rightarrow T\&$$